package com.school.entity;

/**
 * 子类：Student（继承Person，扩展学生特有属性和业务）
 */
public class Student extends Person {
    // 学生特有属性：所选课程（每名学生选1门）
    private Course selectedCourse;

    // 子类构造方法：调用super()初始化父类属性，再初始化子类特有属性
    public Student(String id, String name, String gender) {
        super(id, name, gender); // 必须放在子类构造方法第一行，初始化父类的id/name/gender
        this.selectedCourse = null; // 初始化为未选课状态
    }

    // 核心业务1：选课（原有逻辑，调整姓名获取方式为父类的name）
    public void selectCourse(Course course) {
        if (this.selectedCourse != null) {
            dropCourse(); // 已选则先退课
        }
        this.selectedCourse = course;
        System.out.println("学生【" + this.name + "】成功选修课程：" + course.getCourseName());
    }

    // 核心业务2：退课（原有逻辑，调整姓名获取方式）
    public void dropCourse() {
        if (this.selectedCourse != null) {
            System.out.println("学生【" + this.name + "】成功退课：" + selectedCourse.getCourseName());
            this.selectedCourse = null;
        } else {
            System.out.println("学生【" + this.name + "】当前未选任何课程，无需退课");
        }
    }

    // 重写父类方法：实现“打印学生课表”的业务逻辑
    @Override
    public void printWorksheet() {
        super.printWorksheet(); // 调用父类方法，打印统一表头
        if (this.selectedCourse != null) {
            Course course = this.selectedCourse;
            System.out.println("学生编号：" + this.id); // 直接访问父类protected属性id
            System.out.println("课程编号：" + course.getCourseId());
            System.out.println("课程名称：" + course.getCourseName());
            System.out.println("上课地点：" + course.getLocation());
            System.out.println("上课时间：" + course.getTime());
            System.out.println("课程学分：" + course.getCredit());
            System.out.println("授课教师：" + course.getTeacher().getName()); // 调用Teacher的Getter
        } else {
            System.out.println("当前未选修任何课程");
        }
        System.out.println("=========================\n");
    }

    // Getter（供跨包访问所选课程，可选）
    public Course getSelectedCourse() {
        return selectedCourse;
    }
}